#include<bits/stdc++.h>
using namespace std;
const int N = 6;
bool vis[N][N];
int d[4][2] = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};
int ans = 0;

bool inArea(int x, int y) {
    return x >= 0 && x < 6 && y >= 0 && y < 6;
}

void dfs(int x, int y, int len) {
    // 如果越界，长度大于12，或者访问过 直接返回
    if (!inArea(x, y) || len > 12 || vis[x][y]) return; 
    
    // 如果长度小于12 且为出发点的右边的点 或者 下面的点 就算可以到达
    // 其中有特例 就是 刚出发就停止了 步数为1的时候 还没有开始遍历
    // 所以需要排除这两个特例
    if (len <= 11 && ((x == 0 && y == 1) || (x == 1 && y == 0))) {
        if (len != 1) {
            ans++;
            return;
        }
    }
    vis[x][y] = true;// 标记改点已经被访问
    for (int i = 0; i < 4; i++) {
        int x1 = x + d[i][0], y1 = y + d[i][1];
        dfs(x1, y1, len + 1);
    }
    vis[x][y] = false;
}
 

int main () {
    dfs(0, 0, 0);
    cout << ans<< endl; // 206
    return 0;
}

